import Koa from "koa";
import path from "path";
import Router from "koa-router";
import body from "koa-body";
import cors from "koa2-cors";
import koaStatic from "koa-static";
import websockify from "koa-websocket";
import route from "koa-route";

import AppRoutes from "./routes";

const PORT = 8633;

const app = websockify(new Koa());

app.ws.use(function (ctx, next) {
  ctx.websocket.send("connection succeeded!");
  return next(ctx);
});

app.ws.use(
  route.all("/test", function (ctx) {
    // ctx.websocket.send('Hello World');
    ctx.websocket.on("message", function (message) {
      // do something with the message from client

      if (message !== "ping") {
        const data = JSON.stringify({
          id: Math.ceil(Math.random() * 1000),
          time: new Date().getTime(),
          res: `${message}`,
        });
        ctx.websocket.send(data);
      }
      console.log(message);
    });
  }),
);

const router = new Router();

// router
AppRoutes.forEach((route) => router[route.method](route.path, route.action));

app.use(cors());
app.use(
  body({
    encoding: "gzip",
    multipart: true,
    formidable: {
      // uploadDir: path.join(__dirname, '/upload/'), // 设置文件上传目录
      keepExtensions: true,
      maxFieldsSize: 20 * 1024 * 1024,
    },
  }),
);
app.use(router.routes());
app.use(router.allowedMethods());
app.use(koaStatic(path.join(__dirname)));

app.listen(PORT, () => {
  console.log(`Application started successfully: http://localhost:${PORT}`);
});
